//全局变量：声明在函数外部的变量
//局部变量：声明字函数内部的变量
//局部变量在声明的作用域下有效

var a = 5;
function func1(){
	console.log(a);
}
func1();


var b = 6;
function func2(){
	var b = 3;
	console.log(b);
}
console.log(b);
func2();

var c = 8;
function func3(){
	c = 5;
	console.log(c);
}
console.log(c);
func3();

//函数的定义会得到提升，会提升到当前作用域的顶端
func5();
function func5(){
	console.log(666);


	func6();
	function func6(){
		console.log(888);
	}
}


//变量的声明会提升但定义不会提升,就是说声明放在后面，不会报错
	//console.log(d);
	//var b = 20;


	var e = 10;
	function func7(){
		//查找变量时，会先在当前作用域下查找变量，如果没有该变量，会沿着作用域链继续往上查找

		e = 5;
		//console.log(e);
		var e = 20;
		console.log(e);


	}
	func7();
	console.log(e);
    //一般情况下
	//大作用域不能访问小作用域中的内容
	//小作用域可以访问大作用域中的内容

	function func10(){
		var count = 0;
		function f(){
			count++;
			return count;
		}
		return f;
	}
	var func = func10();
	console.log(func());
	console.log(func());
	
	//console.log(count);

	//闭包：一个拥有许多变量和绑定了这些变量的环境的表达式（通常指函数）。
	//闭包是能够访问函数内部变量的函数
	//闭包是函数内部和函数外部沟通的桥梁
	//被外部变量引用，也叫闭包
	//闭包会造成内存问题，请手动释放，？ = null；
	//对象是引用类型，
	//字符串，数字，布尔型是值类型
